﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace TangoFamilyAndGuide.DB
{
    public class Milonga : db
    {
        public enum eHorarios
		{
			None,
			DB,
			Lista
		};
        List<Entidades.Horario> horarios = new List<Entidades.Horario>();

        public Milonga(Entidades.Sesion Sesion) : base(Sesion)
        {
        }
        public List<Entidades.Milonga> LeerListaMilongasPorUsuario()
        {
            List<Entidades.Milonga> lista = new List<Entidades.Milonga>();
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("select Milonga.IdMilonga, Milonga.IdUsuario, Milonga.Nombre, Milonga.Descripcion, Milonga.Pais, Milonga.Provincia, Milonga.Localidad, Milonga.Direccion, Milonga.CodPost, Milonga.Telefono, ");
                a.Append("Milonga.MonedaEntrada, Milonga.PrecioEntrada, Milonga.ComentarioPrecioEntrada, Milonga.Email, Milonga.WebSite, Milonga.Comentarios, Milonga.NombreContacto, Milonga.EmailContacto, TelefonoContacto, Milonga.IdWF, Milonga.Estado, Milonga.Facebook, Milonga.TipoMilonga, Milonga.TipoMusica, Milonga.TipoPiso, Milonga.GoogleMap, Milonga.Ranking, Milonga.UltActualiz, Milonga.TipoDestacado ");
                a.Append("from Milonga where Milonga.IdUsuario in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='OperMilonga' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active') ");
                DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
                if (dt.Rows.Count != 0)
                {
                    horarios = LeerHorarios("");
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        Entidades.Milonga milonga = new Entidades.Milonga();
                        milonga.Id = Convert.ToInt32(dt.Rows[i]["IdMilonga"]);
                        Copiar(dt.Rows[i], milonga, eHorarios.Lista);
                        lista.Add(milonga);
                    }
                }
            }
            return lista;
        }
        public void Leer(Entidades.Milonga Milonga)
        {
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select Milonga.IdMilonga, Milonga.IdUsuario, Milonga.Nombre, Milonga.Descripcion, Milonga.Pais, Milonga.Provincia, Milonga.Localidad, Milonga.Direccion, Milonga.CodPost, Milonga.Telefono, ");
            a.Append("Milonga.MonedaEntrada, Milonga.PrecioEntrada, Milonga.ComentarioPrecioEntrada, Milonga.Email, Milonga.WebSite, Milonga.Comentarios, Milonga.NombreContacto, Milonga.EmailContacto, TelefonoContacto, Milonga.IdWF, Milonga.Estado, Milonga.Facebook, Milonga.TipoMilonga, Milonga.TipoMusica, Milonga.TipoPiso, Milonga.GoogleMap, Milonga.Ranking, Milonga.UltActualiz, Milonga.TipoDestacado ");
            a.Append("from Milonga ");
            a.Append("where Milonga.IdMilonga = " + Milonga.Id + " ");
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count == 0)
            {
                throw new TangoFamilyAndGuide.EX.Validaciones.ElementoInexistente("Milonga " + Milonga.Id);
            }
            else
            {
                Copiar(dt.Rows[0], Milonga, eHorarios.DB);
            }
        }
        public List<Entidades.Horario> LeerHorarios(string IdMilonga)
        {
            List<Entidades.Horario> Horarios = new List<Entidades.Horario>();
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select * from Horario ");
            if (IdMilonga != string.Empty)
            {
                a.Append("where Horario.IdMilonga = " + IdMilonga);
            }
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count != 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Entidades.Horario Horario = new Entidades.Horario();
                    CopiarHorario(dt.Rows[i], Horario);
                    Horarios.Add(Horario);
                }
            }
            return Horarios;
        }
        private void CopiarHorario(DataRow Desde, Entidades.Horario Hasta)
        {
            Hasta.IdMilonga = Convert.ToInt32(Desde["IdMilonga"]); 
            Hasta.CodigoDiaSemDesde = Convert.ToString(Desde["CodigoDiaSemDesde"]);
            Hasta.CodigoDiaSemHasta = Convert.ToString(Desde["CodigoDiaSemHasta"]);
            Hasta.DescrDiaSemDesde = Entidades.DiasDeLaSemana.Dias.Lista().Find(delegate(Entidades.DiasDeLaSemana.Dias d)
            {
                return d.Id == Hasta.CodigoDiaSemDesde;
            }).Descr;
            Hasta.DescrDiaSemHasta = Entidades.DiasDeLaSemana.Dias.Lista().Find(delegate(Entidades.DiasDeLaSemana.Dias d)
            {
                return d.Id == Hasta.CodigoDiaSemHasta;
            }).Descr;
            Hasta.HorarioDesde = Convert.ToString(Desde["HorarioDesde"]);
            Hasta.HorarioHasta = Convert.ToString(Desde["HorarioHasta"]);
            Hasta.Comentario = Convert.ToString(Desde["Comentario"]);
            Hasta.Activo = Convert.ToBoolean(Desde["Activo"]);
        }
        private void Copiar(DataRow Desde, Entidades.Milonga Hasta, eHorarios EHorarios)
        {
            Hasta.Id = Convert.ToInt32(Desde["IdMilonga"]);
            Hasta.Usuario.Id = Convert.ToString(Desde["IdUsuario"]);
            Hasta.Nombre = Convert.ToString(Desde["Nombre"]);
            Hasta.Descripcion = Convert.ToString(Desde["Descripcion"]);
            Hasta.Pais = Convert.ToString(Desde["Pais"]);
            Hasta.Provincia = Convert.ToString(Desde["Provincia"]);
            Hasta.Localidad = Convert.ToString(Desde["Localidad"]);
            Hasta.Direccion = Convert.ToString(Desde["Direccion"]);
            Hasta.CodPost = Convert.ToString(Desde["CodPost"]);
            Hasta.Telefono = Convert.ToString(Desde["Telefono"]);
            Hasta.MonedaEntrada = Convert.ToString(Desde["MonedaEntrada"]);
            Hasta.PrecioEntrada = Convert.ToDecimal(Desde["PrecioEntrada"]);
            Hasta.ComentarioPrecioEntrada = Convert.ToString(Desde["ComentarioPrecioEntrada"]);
            Hasta.Email = Convert.ToString(Desde["Email"]);
            Hasta.WebSite = Convert.ToString(Desde["WebSite"]);
            Hasta.Contacto.Nombre = Convert.ToString(Desde["NombreContacto"]);
            Hasta.Contacto.Email = Convert.ToString(Desde["EmailContacto"]);
            Hasta.Contacto.Telefono = Convert.ToString(Desde["TelefonoContacto"]);
            Hasta.Comentarios = Convert.ToString(Desde["Comentarios"]);
            Hasta.Facebook = Convert.ToString(Desde["Facebook"]);
            Hasta.GoogleMap = Convert.ToString(Desde["GoogleMap"]);
            Hasta.TipoMilonga = Convert.ToString(Desde["TipoMilonga"]);
            Hasta.TipoMusica = Convert.ToString(Desde["TipoMusica"]);
            Hasta.TipoPiso = Convert.ToString(Desde["TipoPiso"]);
            Hasta.Ranking = Convert.ToInt32(Desde["Ranking"]);
            Hasta.WF.Id = Convert.ToInt32(Desde["IdWF"]);
            Hasta.WF.Estado = Convert.ToString(Desde["Estado"]);
            Hasta.UltActualiz = ByteArray2TimeStamp((byte[])Desde["UltActualiz"]);
            Hasta.TipoDestacado = Convert.ToString(Desde["TipoDestacado"]);
            Hasta.NombreImagenPortada = "PortadaGral.jpg";
            if (EHorarios == eHorarios.DB)
            {
                //Leer por cada registro milonga, los horarios en la base de datos.
                Hasta.Horarios = LeerHorarios(Desde["IdMilonga"].ToString());
            }
            else if (EHorarios == eHorarios.Lista)
            {
                //Buscar por cada registro de milonga, los horarios en la lista que está disponible.
                List<Entidades.Horario> horariosMilonga = horarios.FindAll(delegate(Entidades.Horario h)
                {
                    return h.IdMilonga == Hasta.Id;
                });
                if (horariosMilonga.Count != 0)
                {
                    Hasta.Horarios = horariosMilonga;
                }
            }
        }
        public int Crear(Entidades.Milonga Milonga)
        {
            StringBuilder a = new StringBuilder(string.Empty);
            a.AppendLine("declare @idWF varchar(256) ");
            a.AppendLine("declare @idUltimoIdMilonga varchar(256) ");
            a.AppendLine("update Configuracion set @idWF=Valor=convert(varchar(256), convert(int, Valor)+1) where IdItemConfig='UltimoIdWF' ");
            a.AppendLine("update Configuracion set @idUltimoIdMilonga=Valor=convert(varchar(256), convert(int, Valor)+1) where IdItemConfig='UltimoIdMilonga' ");
            a.Append("Insert Milonga (IdMilonga, IdUsuario, Nombre, Descripcion, Pais, Provincia, Localidad, Direccion, CodPost, ");
            a.Append("Telefono, MonedaEntrada, PrecioEntrada, ComentarioPrecioEntrada, Email, WebSite, ");
            a.Append("NombreContacto, EmailContacto, TelefonoContacto, Comentarios, IdWF, Estado, Facebook, TipoMilonga, TipoMusica, TipoPiso, GoogleMap, Ranking, TipoDestacado) values (");
            a.Append("@idUltimoIdMilonga, ");
            a.Append("'" + Milonga.Usuario.Id + "', ");
            a.Append("'" + Milonga.Nombre + "', ");
            a.Append("'" + Milonga.Descripcion + "', ");
            a.Append("'" + Milonga.Pais + "', ");
            a.Append("'" + Milonga.Provincia + "', ");
            a.Append("'" + Milonga.Localidad + "', ");
            a.Append("'" + Milonga.Direccion + "', ");
            a.Append("'" + Milonga.CodPost + "', ");
            a.Append("'" + Milonga.Telefono + "', ");
            a.Append("'" + Milonga.MonedaEntrada + "', ");
            a.Append(Convert.ToDouble(Milonga.PrecioEntrada) + ", ");
            a.Append("'" + Milonga.ComentarioPrecioEntrada + "', ");
            a.Append("'" + Milonga.Email + "', ");
            a.Append("'" + Milonga.WebSite + "', ");
            a.Append("'" + Milonga.Contacto.Nombre + "', ");
            a.Append("'" + Milonga.Contacto.Email + "', ");
            a.Append("'" + Milonga.Contacto.Telefono + "', ");
            a.Append("'" + Milonga.Comentarios + "', ");
            a.Append("@idWF, ");
            a.Append("'" + Milonga.WF.Estado + "', ");
            a.Append("'" + Milonga.Facebook + "', ");
            a.Append("'" + Milonga.TipoMilonga + "', ");
            a.Append("'" + Milonga.TipoMusica + "', ");
            a.Append("'" + Milonga.TipoPiso + "', ");
            a.Append("'" + Milonga.GoogleMap + "', ");
            a.Append(Milonga.Ranking + ", ");
            a.Append("'" + Milonga.TipoDestacado + "' ");
            a.AppendLine(") ");
            for (int i = 0; i < Milonga.Horarios.Count; i++)
            {
                a.AppendLine("insert Horario (IdMilonga, CodigoDiaSemDesde, CodigoDiaSemHasta, HorarioDesde, HorarioHasta, Comentario, Activo) values (");
                a.Append("@idUltimoIdMilonga, '");
                a.Append(Milonga.Horarios[i].CodigoDiaSemDesde + "', '");
                a.Append(Milonga.Horarios[i].CodigoDiaSemHasta + "', '");
                a.Append(Milonga.Horarios[i].HorarioDesde + "', '");
                a.Append(Milonga.Horarios[i].HorarioHasta + "', '");
                a.Append(Milonga.Horarios[i].Comentario + "', ");
                a.Append(Convert.ToInt32(Milonga.Horarios[i].Activo) + ") ");
            }
            a.AppendLine("insert Log values (@idWF, getdate(), '" + sesion.Usuario.Id + "', 'Milonga', 'Alta', '" + Milonga.WF.Estado + "', '') ");
            a.AppendLine("Select @idUltimoIdMilonga");
            a.AppendLine();
            DataTable dt = new DataTable();
            dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.Usa, sesion.CnnStr);
            int resp = 0;
            if (dt.Rows.Count != 0)
            {
                resp = Convert.ToInt32(dt.Rows[0][0].ToString());
            }
            return resp;
        }
        public void Modificar(Entidades.Milonga Desde, Entidades.Milonga Hasta)
        {
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("update Milonga set ");
                a.Append("IdUsuario = '" + Hasta.Usuario.Id + "', ");
                a.Append("Nombre = '" + Hasta.Nombre + "', ");
                a.Append("Descripcion = '" + Hasta.Descripcion + "', ");
                a.Append("Pais = '" + Hasta.Pais + "', ");
                a.Append("Provincia = '" + Hasta.Provincia + "', ");
                a.Append("Localidad = '" + Hasta.Localidad + "', ");
                a.Append("Direccion = '" + Hasta.Direccion + "', ");
                a.Append("CodPost = '" + Hasta.CodPost + "', ");
                a.Append("Telefono = '" + Hasta.Telefono + "', ");
                a.Append("MonedaEntrada = '" + Hasta.MonedaEntrada + "', ");
                a.Append("PrecioEntrada = " + Convert.ToDouble(Hasta.PrecioEntrada) + ", ");
                a.Append("ComentarioPrecioEntrada = '" + Hasta.ComentarioPrecioEntrada + "', ");
                a.Append("Email = '" + Hasta.Email + "', ");
                a.Append("WebSite = '" + Hasta.WebSite + "', ");
                a.Append("Comentarios = '" + Hasta.Comentarios + "', ");
                a.Append("NombreContacto = '" + Hasta.Contacto.Nombre + "', ");
                a.Append("EmailContacto = '" + Hasta.Contacto.Email + "', ");
                a.Append("TelefonoContacto = '" + Hasta.Contacto.Telefono + "', ");
                a.Append("Facebook = '" + Hasta.Facebook + "', ");
                a.Append("GoogleMap = '" + Hasta.GoogleMap + "', ");
                a.Append("TipoMilonga = '" + Hasta.TipoMilonga + "', ");
                a.Append("TipoMusica = '" + Hasta.TipoMusica + "', ");
                a.Append("TipoPiso = '" + Hasta.TipoPiso + "', ");
                a.Append("Ranking = '" + Hasta.Ranking + "', ");
                a.Append("TipoDestacado = '" + Hasta.TipoDestacado + "' ");
                a.Append("where IdMilonga = " + Hasta.Id + " ");
                a.AppendLine("delete Horario where IdMilonga = " + Hasta.Id + " ");
                if (Hasta.Horarios != null)
                {
                    for (int i = 0; i < Hasta.Horarios.Count; i++)
                    {
                        a.AppendLine("insert Horario (IdMilonga, CodigoDiaSemDesde, CodigoDiaSemHasta, HorarioDesde, HorarioHasta, Comentario, Activo) values (");
                        a.Append(Hasta.Id + ", '");
                        a.Append(Hasta.Horarios[i].CodigoDiaSemDesde + "', '");
                        a.Append(Hasta.Horarios[i].CodigoDiaSemHasta + "', '");
                        a.Append(Hasta.Horarios[i].HorarioDesde + "', '");
                        a.Append(Hasta.Horarios[i].HorarioHasta + "', '");
                        a.Append(Hasta.Horarios[i].Comentario + "', ");
                        a.Append(Convert.ToInt32(Hasta.Horarios[i].Activo) + ") ");
                    }
                }
                a.AppendLine("insert Log values (" + Hasta.WF.Id.ToString() + ", getdate(), '" + sesion.Usuario.Id + "', 'Milonga', 'Modif', '" + Hasta.WF.Estado + "', '') ");
                a.AppendLine("declare @idLog int ");
                a.AppendLine("select @idLog=@@Identity ");
                a.AppendLine("insert LogDetalle (IdLog, TipoDetalle, Detalle) values (@idLog, 'Desde', '" + Funciones.ObjetoSerializado(Desde) + "')");
                a.AppendLine("insert LogDetalle (IdLog, TipoDetalle, Detalle) values (@idLog, 'Hasta', '" + Funciones.ObjetoSerializado(Hasta) + "')");
                Ejecutar(a.ToString(), TipoRetorno.None, Transaccion.Usa, sesion.CnnStr);
            }
        }
        public void CambiarEstado(Entidades.Milonga Milonga, string Evento, string Estado)
        {
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("update Milonga set ");
                a.Append("Estado='" + Estado + "' ");
                a.AppendLine("where IdMilonga=" + Milonga.Id);
                a.AppendLine("insert Log values (" + Milonga.WF.Id.ToString() + ", getdate(), '" + sesion.Usuario.Id + "', 'Milonga', '" + Evento + "', '" + Estado + "', '') ");
                Ejecutar(a.ToString(), TipoRetorno.None, Transaccion.Usa, sesion.CnnStr);
            }
        }
        public List<Entidades.Milonga> ListaPorIdMilonga(int IdMilonga, bool SoloPropias)
        {
            List<Entidades.Milonga> lista = new List<Entidades.Milonga>();
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("select Milonga.IdMilonga, Milonga.IdUsuario, Milonga.Nombre, Milonga.Descripcion, Milonga.Pais, Milonga.Provincia, Milonga.Localidad, Milonga.Direccion, Milonga.CodPost, Milonga.Telefono, ");
                a.Append("Milonga.MonedaEntrada, Milonga.PrecioEntrada, Milonga.ComentarioPrecioEntrada, Milonga.Email, Milonga.WebSite, Milonga.Comentarios, Milonga.NombreContacto, Milonga.EmailContacto, TelefonoContacto, Milonga.IdWF, Milonga.Estado, Milonga.Facebook, Milonga.TipoMilonga, Milonga.TipoMusica, Milonga.TipoPiso, Milonga.GoogleMap, Milonga.Ranking, Milonga.UltActualiz, Milonga.TipoDestacado ");
                a.Append("from Milonga where (Milonga.IdUsuario in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='OperMilonga' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active')");
                if (!SoloPropias)
                {
                    a.Append(" or '" + sesion.Usuario.Id + "' in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='AdminSITE' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active')) ");
                }
                else
                {
                    a.Append(") ");
                }
                a.Append("and IdMilonga = " + IdMilonga);
                DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
                if (dt.Rows.Count != 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        Entidades.Milonga milonga = new Entidades.Milonga();
                        Copiar(dt.Rows[i], milonga, eHorarios.DB);
                        lista.Add(milonga);
                    }
                }
            }
            return lista;
        }
        public List<Entidades.Milonga> ListaPorNombre(string Nombre, bool SoloPropias)
        {
            List<Entidades.Milonga> lista = new List<Entidades.Milonga>();
            if (sesion.Usuario.Id != null)
            {
                if (sesion.Usuario.Id != null)
                {
                    StringBuilder a = new StringBuilder(string.Empty);
                    a.Append("select Milonga.IdMilonga, Milonga.IdUsuario, Milonga.Nombre, Milonga.Descripcion, Milonga.Pais, Milonga.Provincia, Milonga.Localidad, Milonga.Direccion, Milonga.CodPost, Milonga.Telefono, ");
                    a.Append("Milonga.MonedaEntrada, Milonga.PrecioEntrada, Milonga.ComentarioPrecioEntrada, Milonga.Email, Milonga.WebSite, Milonga.Comentarios, Milonga.NombreContacto, Milonga.EmailContacto, TelefonoContacto, Milonga.IdWF, Milonga.Estado, Milonga.Facebook, Milonga.TipoMilonga, Milonga.TipoMusica, Milonga.TipoPiso, Milonga.GoogleMap, Milonga.Ranking, Milonga.UltActualiz, Milonga.TipoDestacado ");
                    a.Append("from Milonga where (Milonga.IdUsuario in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='OperMilonga' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active')");
                    if (!SoloPropias)
                    {
                        a.Append(" or '" + sesion.Usuario.Id + "' in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='AdminSITE' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active')) ");
                    }
                    else
                    {
                        a.Append(") ");
                    }
                    a.Append("and Nombre like '%" + Nombre + "%'");
                    DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
                    if (dt.Rows.Count != 0)
                    {
                        horarios = LeerHorarios("");
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            Entidades.Milonga milonga = new Entidades.Milonga();
                            Copiar(dt.Rows[i], milonga, eHorarios.Lista);
                            lista.Add(milonga);
                        }
                    }
                }
            }
            return lista;
        }
        public List<Entidades.Milonga> ListaPorPais(string Pais, bool SoloPropias)
        {
            List<Entidades.Milonga> lista = new List<Entidades.Milonga>();
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("select Milonga.IdMilonga, Milonga.IdUsuario, Milonga.Nombre, Milonga.Descripcion, Milonga.Pais, Milonga.Provincia, Milonga.Localidad, Milonga.Direccion, Milonga.CodPost, Milonga.Telefono, ");
                a.Append("Milonga.MonedaEntrada, Milonga.PrecioEntrada, Milonga.ComentarioPrecioEntrada, Milonga.Email, Milonga.WebSite, Milonga.Comentarios, Milonga.NombreContacto, Milonga.EmailContacto, TelefonoContacto, Milonga.IdWF, Milonga.Estado, Milonga.Facebook, Milonga.TipoMilonga, Milonga.TipoMusica, Milonga.TipoPiso, Milonga.GoogleMap, Milonga.Ranking, Milonga.UltActualiz, Milonga.TipoDestacado ");
                a.Append("from Milonga where (Milonga.IdUsuario in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='OperMilonga' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active')");
                if (!SoloPropias)
                {
                    a.Append(" or '" + sesion.Usuario.Id + "' in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='AdminSITE' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active')) ");
                }
                else
                {
                    a.Append(") ");
                }
                a.Append("and Pais like '%" + Pais + "%'");
                DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
                if (dt.Rows.Count != 0)
                {
                    horarios = LeerHorarios("");
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        Entidades.Milonga milonga = new Entidades.Milonga();
                        Copiar(dt.Rows[i], milonga, eHorarios.Lista);
                        lista.Add(milonga);
                    }
                }
            }
            return lista;
        }
        public List<Entidades.Milonga> ListaCompleta(string OrderBy, string Nombre, string Pais, string Provincia, string Localidad, string Dia)
        {
            List<Entidades.Milonga> lista = new List<Entidades.Milonga>();
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select Milonga.IdMilonga, Milonga.IdUsuario, Milonga.Nombre, Milonga.Descripcion, Milonga.Pais, Milonga.Provincia, Milonga.Localidad, Milonga.Direccion, Milonga.CodPost, Milonga.Telefono, ");
            a.Append("Milonga.MonedaEntrada, Milonga.PrecioEntrada, Milonga.ComentarioPrecioEntrada, Milonga.Email, Milonga.WebSite, Milonga.Comentarios, Milonga.NombreContacto, Milonga.EmailContacto, TelefonoContacto, Milonga.IdWF, Milonga.Estado, Milonga.Facebook, Milonga.TipoMilonga, Milonga.TipoMusica, Milonga.TipoPiso, Milonga.GoogleMap, Milonga.Ranking, Milonga.UltActualiz, Milonga.TipoDestacado ");
            a.Append("from Milonga where 1=1 ");
            if (!Nombre.Equals(string.Empty))
            {
                a.Append("and Nombre like '%" + Nombre + "%' ");
            }
            if (!Pais.Equals(string.Empty))
            {
                a.Append("and Pais like '%" + Pais + "%' ");
            }
            if (!Provincia.Equals(string.Empty))
            {
                a.Append("and Provincia like '%" + Provincia + "%' ");
            }
            if (!Localidad.Equals(string.Empty))
            {
                a.Append("and Localidad like '%" + Localidad + "%' ");
            }
            a.Append("and Estado = 'Active' ");
            a.Append("order by " + OrderBy);
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count != 0)
            {
                horarios = LeerHorarios("");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Entidades.Milonga milonga = new Entidades.Milonga();
                    Copiar(dt.Rows[i], milonga, eHorarios.Lista);

                    if (!Dia.Equals(string.Empty) && !Dia.Equals("0"))
                    {
                        //Buscar por cada registro de milonga, si el dia de la semana buscado se encuentra disponible.
                        if (milonga.Horarios != null)
                        {
                            List<Entidades.Horario> horariosMilonga = milonga.Horarios.FindAll(delegate(Entidades.Horario h)
                            {
                                return Convert.ToInt32(Dia) >= Convert.ToInt32(h.CodigoDiaSemDesde) && Convert.ToInt32(h.CodigoDiaSemHasta) >= Convert.ToInt32(Dia);
                            });
                            if (horariosMilonga.Count != 0)
                            {
                                lista.Add(milonga);
                            }
                        }
                    }
                    else
                    {
                        lista.Add(milonga);
                    }
                }
            }
            return lista;
        }
        public List<Entidades.Milonga> Lista(int IndicePagina, int TamañoPagina, string OrderBy, string SessionID, List<Entidades.Milonga> MilongaLista)
        {
            System.Text.StringBuilder a = new StringBuilder();
            a.Append("CREATE TABLE #Milonga" + SessionID + "( ");
            a.Append("[IdMilonga] [int] NOT NULL, ");
	        a.Append("[IdUsuario] [varchar](50) NOT NULL, ");
	        a.Append("[Nombre] [varchar](50) NOT NULL, ");
	        a.Append("[Descripcion] [varchar](250) NOT NULL, ");
	        a.Append("[Pais] [varchar](50) NOT NULL, ");
	        a.Append("[Provincia] [varchar](50) NOT NULL, ");
	        a.Append("[Localidad] [varchar](50) NOT NULL, ");
	        a.Append("[Direccion] [varchar](60) NOT NULL, ");
	        a.Append("[CodPost] [varchar](10) NOT NULL, ");
	        a.Append("[Telefono] [varchar](30) NOT NULL, ");   
	        a.Append("[MonedaEntrada] [varchar](10) NOT NULL, ");   
	        a.Append("[PrecioEntrada] [numeric](18, 2) NOT NULL, ");
	        a.Append("[ComentarioPrecioEntrada] [varchar](250) NOT NULL, ");
	        a.Append("[Email] [varchar](60) NOT NULL, ");
	        a.Append("[WebSite] [varchar](100) NOT NULL, ");
	        a.Append("[Comentarios] [varchar](250) NOT NULL, ");
	        a.Append("[NombreContacto] [varchar](25) NOT NULL, ");
	        a.Append("[EmailContacto] [varchar](60) NOT NULL, ");
	        a.Append("[TelefonoContacto] [varchar](50) NOT NULL, ");
	        a.Append("[IdWF] [int] NOT NULL, ");
            a.Append("[Estado] [varchar](15) NOT NULL, ");
            a.Append("[Facebook] [varchar](100) NOT NULL, ");
            a.Append("[TipoMilonga] [varchar](15) NOT NULL, ");
            a.Append("[TipoMusica] [varchar](15) NOT NULL, ");
            a.Append("[TipoPiso] [varchar](15) NOT NULL, ");
            a.Append("[GoogleMap] [varchar](100) NOT NULL, ");
            a.Append("[Ranking] [int] NOT NULL, ");
            a.Append("[TipoDestacado] [varchar](2) NOT NULL, ");
            a.Append("CONSTRAINT [PK_Milonga" + SessionID + "] PRIMARY KEY CLUSTERED ");
            a.Append("( ");
            a.Append("[IdMilonga] ASC ");
            a.Append(")WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ");
            a.Append(") ON [PRIMARY] ");
            foreach (Entidades.Milonga Milonga in MilongaLista)
            {
                a.Append("Insert #Milonga" + SessionID + " values (" + Milonga.Id + ", '");
                a.Append(Milonga.Usuario.Id + "', '");
                a.Append(Milonga.Nombre + "', '");
                a.Append(Milonga.Descripcion + "', '");
                a.Append(Milonga.Pais + "', '");
                a.Append(Milonga.Provincia + "', '");
                a.Append(Milonga.Localidad + "', '");
                a.Append(Milonga.Direccion + "', '");
                a.Append(Milonga.CodPost + "', '");
                a.Append(Milonga.Telefono + "', '");
                a.Append(Milonga.MonedaEntrada + "', ");
                a.Append(Convert.ToDouble(Milonga.PrecioEntrada) + ", '");
                a.Append(Milonga.ComentarioPrecioEntrada + "', '");
                a.Append(Milonga.Email + "', '");
                a.Append(Milonga.WebSite + "', '");
                a.Append(Milonga.Comentarios + "', '");
                a.Append(Milonga.Contacto.Nombre + "', '");
                a.Append(Milonga.Contacto.Email + "', '");
                a.Append(Milonga.Contacto.Telefono + "', ");
                a.Append(Milonga.WF.Id + ", '");
                a.Append(Milonga.Estado + "', '");
                a.Append(Milonga.Facebook + "', '");
                a.Append(Milonga.TipoMilonga + "', '");
                a.Append(Milonga.TipoMusica + "', '");
                a.Append(Milonga.TipoPiso + "', '");
                a.Append(Milonga.GoogleMap + "', ");
                a.Append(Milonga.Ranking + ", '");
                a.Append(Milonga.TipoDestacado + "') ");
            }
            a.Append("select * ");
            a.Append("from (select top {0} ROW_NUMBER() OVER (ORDER BY {1}) as ROW_NUM, ");
            a.Append("IdMilonga, IdUsuario, Nombre, Descripcion, Pais, Provincia, Localidad, Direccion, CodPost, Telefono, ");
            a.Append("MonedaEntrada, PrecioEntrada, ComentarioPrecioEntrada, Email, WebSite, Comentarios, NombreContacto, EmailContacto, TelefonoContacto, IdWF, Estado, Facebook, TipoMilonga, TipoMusica, TipoPiso, GoogleMap, Ranking, TipoDestacado ");
            a.Append("from #Milonga" + SessionID + " ");
            a.Append("ORDER BY ROW_NUM) innerSelect WHERE ROW_NUM > {2} ");
            a.Append("DROP TABLE #Milonga" + SessionID);
            if (OrderBy.Trim().ToUpper() == "NOMBRE" || OrderBy.Trim().ToUpper() == "NOMBRE DESC" || OrderBy.Trim().ToUpper() == "NOMBRE ASC")
            {
                OrderBy = "#Milonga" + SessionID + "." + OrderBy;
            }
            if (OrderBy.Trim().ToUpper() == "PAIS" || OrderBy.Trim().ToUpper() == "PAIS DESC" || OrderBy.Trim().ToUpper() == "PAIS ASC")
            {
                OrderBy = "#Milonga" + SessionID + "." + OrderBy;
            }
            string commandText = string.Format(a.ToString(), ((IndicePagina + 1) * TamañoPagina), OrderBy, (IndicePagina * TamañoPagina));
            DataTable dt = new DataTable();
            dt = (DataTable)Ejecutar(commandText.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            List<Entidades.Milonga> lista = new List<Entidades.Milonga>();
            if (dt.Rows.Count != 0)
            {
                horarios = LeerHorarios("");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Entidades.Milonga milonga = new Entidades.Milonga();
                    milonga.Id = Convert.ToInt32(dt.Rows[i]["IdMilonga"].ToString());
                    milonga.Usuario.Id = dt.Rows[i]["IdUsuario"].ToString();
                    milonga.Nombre = dt.Rows[i]["Nombre"].ToString();
                    milonga.Descripcion = dt.Rows[i]["Descripcion"].ToString();
                    milonga.Pais = dt.Rows[i]["Pais"].ToString();
                    milonga.Provincia = dt.Rows[i]["Provincia"].ToString();
                    milonga.Localidad = dt.Rows[i]["Localidad"].ToString();
                    milonga.Direccion = dt.Rows[i]["Direccion"].ToString();
                    milonga.CodPost = dt.Rows[i]["CodPost"].ToString();
                    milonga.Telefono = dt.Rows[i]["Telefono"].ToString();
                    milonga.MonedaEntrada = dt.Rows[i]["MonedaEntrada"].ToString();
                    milonga.PrecioEntrada = Convert.ToDecimal(dt.Rows[i]["PrecioEntrada"]);
                    milonga.ComentarioPrecioEntrada = dt.Rows[i]["ComentarioPrecioEntrada"].ToString();
                    milonga.Contacto.Nombre = dt.Rows[i]["NombreContacto"].ToString();
                    milonga.Contacto.Telefono = dt.Rows[i]["TelefonoContacto"].ToString();
                    milonga.Contacto.Email = dt.Rows[i]["Email"].ToString();
                    milonga.Email = dt.Rows[i]["Email"].ToString();
                    milonga.WebSite = dt.Rows[i]["WebSite"].ToString();
                    milonga.Comentarios = dt.Rows[i]["Comentarios"].ToString();
                    milonga.Facebook = dt.Rows[i]["Facebook"].ToString();
                    milonga.TipoMilonga = dt.Rows[i]["TipoMilonga"].ToString();
                    milonga.TipoMusica = dt.Rows[i]["TipoMusica"].ToString();
                    milonga.TipoPiso = dt.Rows[i]["TipoPiso"].ToString();
                    milonga.GoogleMap = dt.Rows[i]["GoogleMap"].ToString();
                    milonga.Ranking = Convert.ToInt32(dt.Rows[i]["Ranking"].ToString());
                    milonga.TipoDestacado = dt.Rows[i]["TipoDestacado"].ToString();
                    milonga.WF.Id = Convert.ToInt32(dt.Rows[i]["IdWF"].ToString());
                    milonga.WF.Estado = dt.Rows[i]["Estado"].ToString();
                    milonga.NombreImagenPortada = "PortadaGral.jpg";
                    //Buscar por cada registro de milonga, los horarios en la lista que está disponible.
                    List<Entidades.Horario> horariosMilonga = horarios.FindAll(delegate(Entidades.Horario h)
                    {
                        return h.IdMilonga == milonga.Id;
                    });
                    if (horariosMilonga.Count != 0)
                    {
                        milonga.Horarios = horariosMilonga;
                    }
                    lista.Add(milonga);
                }
            }
            return lista;
        }
        public bool ComprobarNombreMilonga(string Nombre)
        {
            bool resp = false;
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select Milonga.IdMilonga, Milonga.IdUsuario, Milonga.Nombre, Milonga.Descripcion, Milonga.Pais, Milonga.Provincia, Milonga.Localidad, Milonga.Direccion, Milonga.CodPost, Milonga.Telefono, ");
            a.Append("Milonga.MonedaEntrada, Milonga.PrecioEntrada, Milonga.ComentarioPrecioEntrada, Milonga.Email, Milonga.WebSite, Milonga.Comentarios, Milonga.NombreContacto, Milonga.EmailContacto, TelefonoContacto, Milonga.IdWF, Milonga.Estado, Milonga.Facebook, Milonga.TipoMilonga, Milonga.TipoMusica, Milonga.TipoPiso, Milonga.GoogleMap, Milonga.Ranking, Milonga.UltActualiz, Milonga.TipoDestacado ");
            a.Append("from Milonga where ");
            a.Append("Nombre like '%" + Nombre + "%'");
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count != 0)
            {
                resp = true;
            }
            return resp;
        }
    }
}
